using System;

namespace Example
{
    public abstract class ProtectedMembers
    {
        public int UseProtectedVirtualMethod()
        {
            return ProtectedVirtualMethod();
        }

        public int UseProtectedAbstractMethod()
        {
            return ProtectedAbstractMethod();
        }

        public void SetProtectedVirtualProperty(int value)
        {
            ProtectedVirtualProperty = value;
        }

        public int GetProtectedVirtualProperty()
        {
            return ProtectedVirtualProperty;
        }

        public void SetProtectedAbtsractProperty(int value)
        {
            ProtectedAbstractProperty = value;
        }

        public int GetProtectedAbstractProperty()
        {
            return ProtectedAbstractProperty;
        }

        protected virtual int ProtectedVirtualMethod()
        {
            return 0;
        }

        protected abstract int ProtectedAbstractMethod();

        protected virtual int ProtectedVirtualProperty
        {
            get { return 0; }
            set { }
        }

        protected abstract int ProtectedAbstractProperty
        {
            get; set;
        }
    }
}
